home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
earcd
/
comm2
/
msgsplit.lha
/
MsgSplit.thor
< prev
Wrap
Text File
|
1995-09-15
|
5KB
|
172 lines
/* $VER: MsgSplit.thor 1.3 (14.9.95)
**
** Written by Stelios Melissakis for Thor 2.x.
**
**
** Many-many thanks to Kjell Irgens & the rest of Thor Team :)
**
**/
Options Results
Arg MaxSize .
Signal on Syntax
Signal on Halt
Signal on Break_C
If (MaxSize = '' | MaxSize = '?') Then
Do
Say 'MsgSplit.thor v1.3 (14.9.95)'
Say '© 1995 Stelios Melissakis'CR
Say 'Usage: MsgSplit.thor MAXSIZE/A'
Exit(0)
End
CR = '0a'x
/* You can change these two variables */
/* But be careful! */
ContNextMsg = CR || '<< Continued in Next Message >>' || CR
ContPrevMsg = '<< Continued from Previous Message >>'
/* No more user changes, after this line, please :) */
Eve_EnterMsg = 0
Eve_ReplyMsg = 1
EDB_Deleted = 0
UT_MsgFile = 1
Drop BBSData.
Drop EventData.
Drop EventTags.
Drop UniqueStem.
Drop CurStem.
Window = 0
CurMsg = 0
adrstr = Address() || ' ' || Show('P',,)
If Pos('THOR.',adrstr) > 0 Then
ThorPort = Word(SubStr(adrstr, Pos('THOR.',adrstr)),1)
Else
Do
Say 'No THOR port found!'
Exit(0)
End
If ~Show('l','rexxsupport.library') Then
If ~AddLib('rexxsupport.library',0,-30) Then
Exit(25)
If ~Show('p', 'BBSREAD') Then
Do
Address Command
"Run >NIL: `GetEnv THOR/THORPath`bin/LoadBBSRead"
"WaitForPort BBSREAD"
End
Address(ThorPort)
CurrentSystem CurStem
If (rc = 30) Then Call Fail
Address("BBSREAD")
GetBBSData '"'CurStem.BBSName'"' Stem BBSData
If (rc ~= 0) Then Call Fail
If BBSData.NumEvents = "BBSDATA.NUMEVENTS" Then Exit(0)
Address(ThorPort)
OpenProgress Title '"Splitting messages"' Total BBSData.NumEvents ProgressCharWidth 40
If (rc = 0) Then Window = Result
Else Call Fail
Do n = BBSData.FirstEvent To BBSData.LastEvent
Address("BBSREAD")
ReadBREvent bbsname '"'CurStem.BBSName'"' EventNR n TagsStem EventTags DataStem EventData
If (rc ~= 0) Then Call Fail
If (~BITTST(EventData.Flags, EDB_Deleted)) Then CurMsg = CurMsg + 1
If (~BITTST(EventData.Flags, EDB_Deleted) & ((EventData.EventType = Eve_EnterMsg) | (EventData.EventType = Eve_ReplyMsg))) Then
Do
FName = BBSData.BBSPath || EventTags.MsgFile
FSize = FileSize(FName)
If FSize > MaxSize Then
Do
Drop WtStem.
Pieces = FSize % MaxSize
If (((FSize / MaxSize) - (FSize % MaxSize)) ~= 0) Then Pieces = Pieces + 1
bc = 1
If Open(Source, FName, 'R') Then
Do
Do Until EOF(Source)
If ~Open(Dest, 'T:Thor_TMP_Msg', 'W') Then Call Fail
If bc > 1 Then Call WriteLn(Dest, ContPrevMsg || ' (' || bc || '/' || Pieces || ')' CR)
TotSize = 0
Do Until (TotSize > (MaxSize - 170)) | EOF(Source)
TotSize = TotSize + WriteLn(Dest, ReadLn(Source))
End
If ~EOF(Source) Then Call WriteLn(Dest, ContNextMsg)
Call Close(Dest)
UniqueMsgFile BBSName '"'CurStem.BBSName'"' Stem UniqueStem UseTag UT_MsgFile FromFile 'T:Thor_TMP_Msg'
If (rc ~= 0) Then Call Fail
WtStem.ToName = EventTags.ToName
WtStem.Subject = EventTags.Subject
WtStem.Conference = EventTags.Conference
WtStem.MsgFile = UniqueStem.FilePart
WtStem.Private = EventTags.Private
WtStem.Date = EventTags.Date
WtStem.RefNr = EventTags.RefNr
WtStem.RefOrginalNr = EventTags.RefOrginalNr
If EventTags.PGPSignID ~= "EVENTTAGS.PGPSIGNID" Then WtStem.PGPSignID = EventTags.PGPSignID
If EventTags.PGPEncryptID ~= "EVENTTAGS.PGPENCRYPTID" Then WtStem.PGPEcryptID = EventTags.PGPEcryptID
WriteBREvent BBSName '"'CurStem.BBSName'"' Event EventData.EventType Stem WtStem
If (rc ~= 0) Then Call Fail
bc = bc + 1
End
Call Close(Source)
End
Else Call Fail
UpdateBREvent BBSname '"'CurStem.BBSName'"' EventNr n SetDeleted
If (rc ~= 0) Then Call Fail
End
End
Address(ThorPort)
UpdateProgress Req Window Current CurMsg PT '"Message 'CurMsg' of 'BBSData.NumEvents'(OrgEvent:'n')"'
If (rc ~= 0) Then Call Fail
End
Fail:
Syntax:
Signal Off Syntax
If (rc >30) Then Say 'Error in line 'SIGL': ' ErrorText(rc) ||CR|| SourceLine(SIGL)
If Thor.LastError ~= 'THOR.LASTERROR' Then Say Thor.LastError
If BBSRead.LastError ~= 'BBSREAD.LASTERROR' Then Say BBSRead.LastError
Halt:
Break_C:
FileSrch = Show('F',,)
If Pos('SOURCE',FileSrch) ~= 0 Then Call Close(Source)
If Pos('DEST',FileSrch) ~= 0 Then Call Close(Dest)
If (Window ~= 0) Then
Do
Address(ThorPort)
CloseProgress Req Window
Window = 0
End
If Exists("T:Thor_TMP_Msg") Then
Call Delete("T:Thor_TMP_Msg")
Exit(0)
/***************************************************************************/
/* Procedures */
/***************************************************************************/
FileSize: Procedure
Arg fn
FData = StateF(fn)
FSpc = Pos(' ', FData)
LSpc = Pos(' ', FData, FSpc + 1)
Return SubStr(FData, FSpc+1, LSpc-FSpc-1)
/***************************************************************************/